gdk_window_flush_implicit_paint (window);
}
+/* If we're about to move/resize or otherwise change the
+ * hierarchy of a client side window in an impl and we're
+ * called from an expose event handler then we need to
+ * flush any already painted parts of the implicit paint
+ * that are not part of the current paint, as these may
+ * be used when scrolling or may overdraw the changes
+ * caused by the hierarchy change.
+ */
+static void
+gdk_window_flush_if_exposing (GdkWindow *window)
+{
+ GdkWindowObject *private;
+ GdkWindowObject *impl_window;
+ GList *l;
+ GdkWindowRegionMove *move;
+
+ private = (GdkWindowObject *) window;
+ impl_window = gdk_window_get_impl_window (private);
+
+ /* If we're in an implicit paint (i.e. in an expose handler, flush
+ all the already finished exposes to get things to an uptodate state. */
+ if (impl_window->implicit_paint)
+ gdk_window_flush (window);
+}
+
+
static void
gdk_window_flush_recursive_helper (GdkWindowObject *window,
GdkWindow *impl)
if (private->destroyed)
return;
+ gdk_window_flush_if_exposing (window);
+
old_region = NULL;
if (gdk_window_is_viewable (window) &&
!private->input_only)
if (private->destroyed)
return;
+ gdk_window_flush_if_exposing (window);
+
/* Keep children in (reverse) stacking order */
gdk_window_lower_internal (window);
return;
}
+ gdk_window_flush_if_exposing (window);
+
if (gdk_window_is_toplevel (private))
{
g_return_if_fail (gdk_window_is_toplevel (GDK_WINDOW_OBJECT (sibling)));
private->y == y)))
return;
+ gdk_window_flush_if_exposing (window);
+
/* Handle child windows */
expose = FALSE;
if (private->destroyed)
return;
+ gdk_window_flush_if_exposing (window);
+
old_native_child_region = collect_native_child_region (private, FALSE);
if (old_native_child_region)
{